package cn.tt.tuantuanerp.passport.webapi.mapper;


import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.entity.User;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.UserDetailsVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.UserListItemVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.UserLoginInfoVO;
import cn.tt.tuantuanerp.tuantuanerp.comment.pojo.vo.UserStandardVO;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper {

    /**
     * 添加新用户
     * @param user     新用户信息
     * @return      受影响行数
     */
    int insert(User user);

    /**
     * 通过id删除用户
     * @param id    用户id
     * @return  受影响行数
     */
    int deleteById(Long id);

    /**
     * 获取登录信息
     * @param authentication  登录信息(邮箱,电话,登录名皆可)
     * @return  登录对象
     */
    UserLoginInfoVO getLoginInfo(String authentication);

    /**
     * 通过登录名查找用户
     * @param loginName  登录名
     * @return   受影响行数
     */
     UserStandardVO getStandardByLoginName(String loginName);

    /**
     * 通过id查找用户
     * @param id  用户id
     * @return   受影响行数
     */
    UserStandardVO getStandardById(Long id);

    /**
     * 通过电话号码查找用户
     * @param phone  电话号码
     * @return   受影响行数
     */
    int countByPhone(String phone);

    /**
     * 通过邮箱查找用户
     * @param email  邮箱
     * @return   受影响行数
     */
    int countByEmail(String email);

    /**
     *
     * 通过登录信息获取用户id
     * @param authentication    登录信息
     * @return   用户id
     */
    Long getIdByAuthentication(String authentication);

    /**
     * 查询用户列表
     * @return
     */
    List<UserListItemVO> list();

    /**
     * 根据用户名模糊查询用户列表
     * @param username 用户名
     * @return
     */
    List<UserListItemVO> listByUsername(String username);

    /**
     * 根据登录名模糊查询用户列表
     * @param loginName 登录名
     * @return
     */
    List<UserListItemVO> listByLoginName(String loginName);

    /**
     * 根据是否启用查询用户列表
     * @param enable 登录名
     * @return
     */
    List<UserListItemVO> listByEnable(Integer enable);

    /**
     * 根据用户id查询用户详情
     * @return 返回用户详细信息
     */
    UserDetailsVO getUserDetailsVOById(Long id);

    /**
     * 根据id查询密码
     * @param id 用户id
     * @return
     */
    String getPasswordById(Long id);

    /**
     * 根据id修改用户信息
     * @param user 用户信息
     * @return 受影响行数
     */
    int updateById(User user);
}
